import hashlib
import requests
import json

# 2021-06-13 23:47 by 炸天帮成员
# https://blog.csdn.net/yuankingping/article/details/112289212
#   由于金山的sign是动态变化的，所以需要提取这个动态的sign，关于此步可以参照上述网站的操作内容进行。
#   关于上一行，即在chrome->F12->Network->XHR->找到POST的选项->查看JSON是不是你想要的那个包
#   ->若发现有参数在无规律变化->Initiator->左下角的{}选项->键盘输入ctrl+F->输入变动的选项，本例中为输入&sign->
#   找到对应的js加密处，双击行号进行断点调试->在网页处输入相关内容，本例中可以输入hello在iciba的翻译左框中->然后查看js文件中的return值->根据观察，可以初步判定为md5加密。
#   关于头文件headers的操作可以对比Fiddler的Raw进行查看。

#-----------------------------------------------------------------
# 以下为使用md5逆向js来获取url中的sign中的真实值
user_input = input('输入你想要查询的英文单词或者句子： ')
hash_type = hashlib.md5()
hash_type.update(bytes('6key_cibaifanyicjbysdlove1'+user_input,encoding='utf-8'))
sign = hash_type.hexdigest()[0:16]

#-----------------------------------------------------------------
# 以下为POST请求获取网站的响应
url = f"https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba&sign={sign}"
post_data = {'from':'auto','to':'auto','q':user_input}
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
    'Content-Length':'23',
    'Content-Type':'application/x-www-form-urlencoded',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection':'keep-alive',
    'Host':'ifanyi.iciba.com',
    'sec-ch-ua':'" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"',
    'Sec-Fetch-Site':'same-site',
    'Sec-Fetch-Mode':'cors',
    'Sec-Fetch-Dest':'empty',
    }
r=requests.post(url,data=post_data,headers=headers)
print(r.text)
json_data = json.loads(r.text)  # 使用json来获取网站的响应
print(f'{user_input}的中文翻译为：' + json_data['content']['out'])

